home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
a_utils
/
decomp.lha
/
decomp
/
vartab.h
< prev
Wrap
C/C++ Source or Header
|
1988-01-12
|
3KB
|
106 lines
/*
* Module: vartab.h
*
* Author: J. Reuter
*
* This file contains data structures and constants used by vartab.c,
* responsible for all decompiler internal symbol management.
*/
/*
* types
*
* These types attributes are attached to all internal variable
* information. The type is used to generate suffexes for generated
* names, and to infer type conversions.
*
* The TYP* constants are defined in ops.h. Sources files including
* this file must first include ops.h.
*/
#define T_CHAR TYPB
#define T_SHORT TYPW
#define T_LONG TYPL
#define T_FLOAT TYPF
#define T_DOUBLE TYPD
#define T_FUNC TYPS
/*
* the following constants must be powers of two (bits) and must be
* distinct from the above type values
*/
/* type modifiers */
#define T_UNSIGNED 1
#define T_POINTER 16
/*
* classes
*
* These are the storage classes of static information. They are used
* to determine variable scoping (residence).
*/
#define C_TEXT 0
#define C_DATA 8
#define C_BSS 16
/*
* class modifiers
*
* C_WRITTEN is set for variables that are written. It is or'ed with
* T_UNSIGNED in the flag part of the tables, so the bits used must not
* conflict.
* C_STATIC is set for variables that have no global symbol table entry.
*/
#define C_WRITTEN 2
#define C_STATIC 4
/*
* variable table structures
*
* The following structures store variable information in chains kept
* sorted by 'address'.
*/
/*
* regtype is used to store register, local, and argument information.
*/
struct regtype {
int v_address; /* register number */
int type; /* variable type */
int flag; /* C_WRITTEN, T_UNSIGNED */
struct regtype *next; /* pointer to next regtype entry */
};
/*
* inttype stores private (static global) variables
*/
struct inttype {
address v_address; /* address of variable */
int type; /* variable type */
int flag; /* C_WRITTEN, T_UNSIGNED */
int class; /* variable class and modifiers */
int symbolnum; /* symbolnum from symbol table */
char *value_ptr; /* internal address of initialized value */
struct inttype *next; /* pointer to next entry */
};
/*
* exttype stores public (external) variables.
*/
struct exttype {
unsigned int symnum; /* symbol number from symbol table */
int type; /* variable type */
int offset; /* operand displacement value */
int flag; /* C_WRITTEN, T_UNSIGNED */
struct exttype *next; /* pointer to next entry */
};
/*
* declare the function types
*/
extern char *reg_sym();
extern char *loc_sym();
extern char *arg_sym();
extern char *int_sym();
extern char *ext_sym();